#include<stdio.h>
#include<signal.h>

volatile int quit = 0; // volatile: 保存内存可见性
// 我是时时刻刻都在内存中读取

void handler(int signo)
{
    printf("%d 号信号，正在被捕捉！\n");
    printf("quit: %d",quit);
    quit = 1;
    printf("->%d\n",quit);
}
int main()
{
    signal(2,handler);
    while(!quit);// 物理内存中的quit已经改了，但是寄存器中的quit没有改，所以一直在循环
    // 这个优化就是只读取寄存器中的值，而没有读取物理内存的值
    printf("注意，我时正常退出的！\n");
    return 0;
}

//////////////////////////////////////////////////////////////////////

// 编译器优化 --> 寄存器
// debug一般不会时-O3，但是再relase下又可能优化成最高级别